package koby99;

public class J15_OOP1 {

	// 객체지향 개발 기법
	// OOP : 객체를 기반으로 프로그램을 작성하는 것
	// OOP 언어로 응용 프로그램을 개발하는 경우,
	// 문제 해결을 위해 실제 상황과 유샇나 모델을 만들어야 함
	
	// 예를 들어, 직원 세금을 계싼하는 프로그램 작성
	// 프로그램에서 회사를 표현하는 회사객체가 필요
	// 또한, 직원을 나타내는 직원객체, 세금을 나타내는 세금객체도 필요
	
	// 회사, 직원, 세금 객체를 자바 프로그램에서 
	// 코드로 나타내는 방법에 대해 알아봄
	
	// 모든 객체에는 2가지 성질이 있음
	// [속성property], 객체가 할 수 있는 [행동action]
	// 현실세계에 존재하는 객체를 자바언어로 가져오는 경우에도
	// 자바에서 속성은 field, 행위는 method 라 함
	// 단, 필드와 메서드는 선택사항(생략가능)임
	
	// 자바 객체를 만드는 방법은? - 설계도를 이용
	// '차'라는 객체를 잘만들려면
	// 좋은 차로 만들어 주는 [설계도]를 참고
	// OOP 에서 객체를 만들어 주는 설계도를 클래스라 함
	
	// 클래스는 동일한 유형의 객체를 만드는
	// 청사진/설계도 또는 템플릿임 (중요!)
	// 붕어빵 - 객체
	// 붕어빵 틀 - 클래스
	// 밀가루, 팥 - 속성
	// 클래스는 당신이 만들려는 객체의 종류를 결정함
	
	// 요약하자면 , 클랫는 프로그래머로 하여금
	// 문제의 추상화를 만들 수 있기 해주는 OOP 도구임
	// OOP에서 추상화abatraction는 실제 객체를 표현하기 위해
	// 실제 객체에서 핵심적인 개념 또는 기능을 뽑아
	// 프로그래밍 객체로 만드는 행위를 말함
	
	// 클래스는 자바 프로그램의 기본 뼈대
	// 자바 초보자는 클래스르 작성할 때
	// 클래스이름, 이름, 메서드 등을 고려할 것
	
	
	// 클래스 만들기
	// class 클래스 이름 {
	//		 클래스 몸체(필드, 메서드)
	// }
	
	// 클래스 이름은 반드시 대문자로 시작
	// 클래스 정의시 클래스 이름과 동일하게 파일 이름을 저장해야함
	// 크래스 내에 선언된 변수를 필드field라 함
	public static void main(String[] args) {
		
		
/*//		// 클래스를 사용하지 않고 학생 객체 생성
		String name = "강아람";
		int stdno = 1234567;
		String addr = "부산 남구 문현동";
		int mp = 12345667;
	   
		String name2 = "송혜교";
		int stdno2 = 21234567;
		String addr2 = "부산 진구 전포동";
		int mp2 = 312345667;
*/		
		
						
		
		/*// 클래스를 이용해서 학생 객체 생성
		Student taehee = new Student();
		taehee.name = "태희";
		taehee.stdno = 1345678;
		taehee.addr = "부산 남구 문현동";
		taehee.mp = 12456666;
				
		Student suji = new Student();
		suji.name = "수지";
		suji.stdno = 1234567;
		suji.addr ="서울 광진구 자양동";
		suji.mp = 123567890;*/
		
		//생성자를 이용한 학생 객체 생성
		Student one = new Student();
		System.out.println(one.name);
		
		Student two = new Student();
		System.out.println(two.name);
		
		// 고객
		Customer sasa = new Customer();
		sasa.ID = "sasa";
		sasa.PSWD = 45432;
		sasa.addr = "서울 강남구";
		sasa.mp = 1025940332;
		sasa.email = "yb@a.com";
		Customer one1 = new Customer();
		System.out.println(one1.ID);
	} // main

} // class

	//학생 클래스 정의
	class Student {//첫번째 글자는 대문자
		// 필드 선언
		String name;
		int stdno;
		String addr;
		int mp;
public Student(){
		stdno = 12346;
		name = "아무개";
		addr = "서울";
		mp = 98765;}	
			
	
	}
	
	// 고객 (Customer) 클래스
	// 아이디, 비밀번호, 이름, 주소, 전화번호, 이메일
	class Customer {
		String ID;
		int PSWD;
		String addr;
		int mp;
		String email;

public Customer(){
	ID = "Ko";
	PSWD = 1234;
}
		
		
	}
	
	// 상품(Product) 클래스
	// 상품번호, 상품명, 가격, 종류, 제조사
	class Product { 
		int pumB;
		String pumN;
		int gag;
		String cls;
		String maid;
		
	}
	
	// 스타크래프트 2의 테란 유닛 (TerranUnit)을
	// 클래스로 정의
	// 생명력, 에너지, 방어력
	// 광물, 베스핀, 보급품, 생산시간
	
	class TarranUnit {
		String name;
		int HP;
		int MP;
		int bang;
		int mina;
		int ing;
		int time;
		
	}